<?php
/*************
 # 有关框架的基本配置与函数，须要在每个应用的入口处加载
 # lsj 2010-09-25
************/

if(!defined('APP_HOME')) exit('Access Denied');

set_exception_handler('exception_handler');#注册错误处理函数
if(!get_magic_quotes_gpc()) ini_set('magic_quotes_gpc', 'On');#转义GPC数据


/**
 * 自动加载PHP类文件
 */
function __autoload($className)
{
	$C = strrpos($className, CTRL_SUFFIX);
    $M = strrpos($className, MODEL_SUFFIX);
	$B = strpos($className, '_');

	$classFile = '';

	if($B === false){
        #控制器类
        if($C !== false && substr($className, $C) === CTRL_SUFFIX){
            $classFile = CTRL_ROOT . DS . $className . '.php';
        }
        #模型类
        elseif($M !== false && substr($className, $M) === MODEL_SUFFIX){
            $classFile = MOD_ROOT . DS . $className . '.php';
        }
    }else{
        #库中类
		$className = str_replace('_', DS, $className) . '.php';
		$classFile = APP_HOME . DS . $className;
	}

	if(!file_exists($classFile)){
        #控制器类文件不存在,并且不是调试时,自动加载默认控制器类
        if(IS_DEBUG == 0 && $C !== false && substr($className, $C) === CTRL_SUFFIX){
            $classFile = CTRL_ROOT . DS . DEFAULT_CTRL . CTRL_SUFFIX . '.php';
        }else{
            throw new Exception('The file "'.$classFile.'" is not exists..');
        }
	}

    require_once $classFile;
    return true;
}

/**
 * 加载配置文件
 */
function loadConfig($filename)
{
    return require CONF_ROOT . DS . $filename . '.php';
}

/**
 * 加载模型文件
 */
function loadModel($modname)
{
    $modname .= MODEL_SUFFIX;
    return new $modname;
}

/**
 * 是否为AJAX请求
 */
function isAjax()
{
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
        if('xmlhttprequest' == strtolower($_SERVER['HTTP_X_REQUESTED_WITH']))
            return true;
    }
    return false;
}

/**
 * 获取控制器的动作所对应的URL
 */
function getUrl($ctrl, $act='', $params = array())
{
    $p = '';
    $ctrlArr = array();
    if(!$act) $act = strtolower(DEFAULT_ACTION);
    $ctrlArr[URL_CTRL_NAME] = $ctrl;
    $ctrlArr[URL_ACT_NAME] = $act;
    $params = array_merge($ctrlArr, $params);
    $p = DOMAIN_DOOR . '?' . http_build_query($params);

    if(2 === URL_MODE){
        $p = str_replace(array(URL_CTRL_NAME.'=', URL_ACT_NAME.'='), '', $p);
		$p = str_replace(array('?', '&', '='), '/', $p);
    }

    return $p;
}


/**
 * 获取系统中THROW出的错误
 */
function exception_handler($e)
{
	if(IS_DEBUG === 2) $LN = "<br />\r\n";
	elseif(IS_DEBUG === 1) $LN = "\r\n";
	$str = '';
	$str .= 'Info: '.$e->getMessage().$LN.$LN;
	$str .= 'File: '.$e->getFile().$LN;
	$str .= 'Line: '.$e->getLine().$LN;
	if(IS_DEBUG === 0){
        echo $LN . '<!--Application error-->' . $LN;
	}elseif(IS_DEBUG === 1){
		echo $LN . '<!--' . $LN. $str . '-->' . $LN;
	}elseif(IS_DEBUG === 2){
        if(isAjax()){
            echo str_replace('<br />', '', $str.$LN);
        }else{
		    echo '<font color="red">'.$str.'</font>'.$LN;
        }
	}
}


######常用基本函数文件#######
require_once 'function.php';

